# +----------------------------------------------------------------------
# | ChatWork智能聊天办公系统
# +----------------------------------------------------------------------
# | 软件声明: 本系统并非自由软件,未经授权任何形式的商业使用均属非法。
# | 版权保护: 任何企业和个人不允许对程序代码以任何形式任何目的复制/分发。
# | 授权要求: 如有商业使用需求,请务必先与版权所有者取得联系并获得正式授权。
# +----------------------------------------------------------------------
# | Author: ChatWork Team <2474369941@qq.com>
# +----------------------------------------------------------------------
import time
from common.enums.notice import NoticeEnum
from common.models.notice import NoticeRecord


class SysNotice:

    async def send(self, scene: int, params: dict, template: dict):
        """
        发送系统通知。

        Args:
            scene (int): 发送场景参数。
            params (int): 发送的参数。
            template (int): 模板参数。

        Author:
            zero
        """
        # 建发送记录
        await NoticeRecord.create(
            scene=scene,
            user_id=params.get("user_id", 0),
            account=params.get("account", ""),
            title=template.get("name"),
            code=self._get_code(params, template),
            content=self._get_content(params, template),
            receiver=template.get("get_client", 1),
            sender=NoticeEnum.SENDER_SYS,
            status=NoticeEnum.STATUS_OK,
            is_read=NoticeEnum.VIEW_UNREAD,
            is_captcha=template.get("is_captcha"),
            expire_time=int(params.get("expire_time", 0)) + int(time.time()) + 900,
            create_time=int(time.time()),
            update_time=int(time.time())
        )

    @staticmethod
    def _get_content(params: dict, template: dict) -> str:
        """
        获取消息内容(替换模板变量)。

        Args:
            params (int): 发送的参数。
            template (int): 模板模型参数。

        Returns:
             str: 处理后的模型。

        Author:
            zero
        """
        content = template.get("sys_template", {}).get("content", "")
        for item, val in params.items():
            search_replace = "${" + item + "}"
            content = content.replace(search_replace, str(val))

        return content

    @staticmethod
    def _get_code(params: dict, template: dict) -> str:
        """
        获取系统验证码(某些场景不需要)。

        Args:
            params (int): 发送的参数。
            template (int): 模板模型参数。

        Returns:
             str: 验证码值。

        Author:
            zero
        """
        code = ""
        if template.get(str("is_captcha"), False):
            code_dict = {k: v for k, v in params.items() if k in template.get("variable", {})}
            if code_dict and code_dict is not None:
                code = list(code_dict.values())[0]

        return str(code)
